// 引入axios封装
import axios from 'axios'
import { showToast } from 'vant'
import i18n from '../lang/i18n.ts'
import router from '../router'

// 创建axios实例
const request = axios.create({
    baseURL: import.meta.env.VITE_BASE_URL,
    timeout: 5000, // 5s超时
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
})

// 请求拦截器 一般写法模式
request.interceptors.request.use(
    (config) => {
        const token:string = localStorage.getItem('token') || '';

        if(token){
            config.url += (config.url.includes('?') ? '&' : '?') + 'X-Token=' + token;
        }

        return config // 请求成功则返回response
    },
    (error) => { // 请求失败则显示错误状态
        showToast(error.message)
        return Promise.reject(error)
    }
)

// 响应拦截器
request.interceptors.response.use(
    (response) => {
        const res = response.data;

        if (res.code !== 0 && res.code !== 1) {
            switch (res.code) {
                case 500001:
                    showToast(i18n.global.t('user.tokenIsNull'));
                    break;
                case 500002:
                    showToast(i18n.global.t('user.loginExpired'));
                    break;
                case 500003:
                    showToast(i18n.global.t('user.doesNotExist'));
                    break;
                case 500004:
                    showToast(i18n.global.t('user.doesNotExist'));
                    break;
            }

            if (String(res.code)[0] === '5') {
                if (router) {
                    router.push('/login');
                }
            }
        } else {
            return res;
        }
    },
    (error) => {
        showToast(error.message)
        return Promise.reject(error)
    }
)

// 导出request
export default request
